home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / include / rpcsvc / key_prot.x < prev    next >
Text File  |  2009-10-07  |  7KB  |  284 lines

  1. /*
  2.  * Key server protocol definition
  3.  * Copyright (C) 1990, 1991 Sun Microsystems, Inc.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that the following conditions are
  7.  * met:
  8.  *
  9.  *     * Redistributions of source code must retain the above copyright
  10.  *       notice, this list of conditions and the following disclaimer.
  11.  *     * Redistributions in binary form must reproduce the above
  12.  *       copyright notice, this list of conditions and the following
  13.  *       disclaimer in the documentation and/or other materials
  14.  *       provided with the distribution.
  15.  *     * Neither the name of Sun Microsystems, Inc. nor the names of its
  16.  *       contributors may be used to endorse or promote products derived
  17.  *       from this software without specific prior written permission.
  18.  *
  19.  *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  20.  *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  21.  *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  22.  *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  23.  *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  24.  *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25.  *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  26.  *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  27.  *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  28.  *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29.  *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  30.  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * The keyserver is a public key storage/encryption/decryption service
  33.  * The encryption method used is based on the Diffie-Hellman exponential
  34.  * key exchange technology.
  35.  *
  36.  * The key server is local to each machine, akin to the portmapper.
  37.  * Under TI-RPC, communication with the keyserver is through the
  38.  * loopback transport.
  39.  *
  40.  * NOTE: This .x file generates the USER level headers for the keyserver.
  41.  * the KERNEL level headers are created by hand as they kernel has special
  42.  * requirements.
  43.  */
  44.  
  45. %#if 0
  46. %#pragma ident    "@(#)key_prot.x    1.7    94/04/29 SMI"
  47. %#endif
  48. %
  49. %/* Copyright (c)  1990, 1991 Sun Microsystems, Inc. */
  50. %
  51. %/*
  52. % * Compiled from key_prot.x using rpcgen.
  53. % * DO NOT EDIT THIS FILE!
  54. % * This is NOT source code!
  55. % */
  56.  
  57. /*
  58.  * PROOT and MODULUS define the way the Diffie-Hellman key is generated.
  59.  *
  60.  * MODULUS should be chosen as a prime of the form: MODULUS == 2*p + 1,
  61.  * where p is also prime.
  62.  *
  63.  * PROOT satisfies the following two conditions:
  64.  * (1) (PROOT ** 2) % MODULUS != 1
  65.  * (2) (PROOT ** p) % MODULUS != 1
  66.  *
  67.  */
  68.  
  69. const PROOT = 3;
  70. const HEXMODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
  71.  
  72. const HEXKEYBYTES = 48;        /* HEXKEYBYTES == strlen(HEXMODULUS) */
  73. const KEYSIZE = 192;        /* KEYSIZE == bit length of key */
  74. const KEYBYTES = 24;        /* byte length of key */
  75.  
  76. /*
  77.  * The first 16 hex digits of the encrypted secret key are used as
  78.  * a checksum in the database.
  79.  */
  80. const KEYCHECKSUMSIZE = 16;
  81.  
  82. /*
  83.  * status of operation
  84.  */
  85. enum keystatus {
  86.     KEY_SUCCESS,    /* no problems */
  87.     KEY_NOSECRET,    /* no secret key stored */
  88.     KEY_UNKNOWN,    /* unknown netname */
  89.     KEY_SYSTEMERR     /* system error (out of memory, encryption failure) */
  90. };
  91.  
  92. typedef opaque keybuf[HEXKEYBYTES];    /* store key in hex */
  93.  
  94. typedef string netnamestr<MAXNETNAMELEN>;
  95.  
  96. /*
  97.  * Argument to ENCRYPT or DECRYPT
  98.  */
  99. struct cryptkeyarg {
  100.     netnamestr remotename;
  101.     des_block deskey;
  102. };
  103.  
  104. /*
  105.  * Argument to ENCRYPT_PK or DECRYPT_PK
  106.  */
  107. struct cryptkeyarg2 {
  108.     netnamestr remotename;
  109.     netobj    remotekey;    /* Contains a length up to 1024 bytes */
  110.     des_block deskey;
  111. };
  112.  
  113.  
  114. /*
  115.  * Result of ENCRYPT, DECRYPT, ENCRYPT_PK, and DECRYPT_PK
  116.  */
  117. union cryptkeyres switch (keystatus status) {
  118. case KEY_SUCCESS:
  119.     des_block deskey;
  120. default:
  121.     void;
  122. };
  123.  
  124. const MAXGIDS  = 16;    /* max number of gids in gid list */
  125.  
  126. /*
  127.  * Unix credential
  128.  */
  129. struct unixcred {
  130.     u_int uid;
  131.     u_int gid;
  132.     u_int gids<MAXGIDS>;
  133. };
  134.  
  135. /*
  136.  * Result returned from GETCRED
  137.  */
  138. union getcredres switch (keystatus status) {
  139. case KEY_SUCCESS:
  140.     unixcred cred;
  141. default:
  142.     void;
  143. };
  144. /*
  145.  * key_netstarg;
  146.  */
  147.  
  148. struct key_netstarg {
  149.     keybuf st_priv_key;
  150.     keybuf st_pub_key;
  151.     netnamestr st_netname;
  152. };
  153.  
  154. union key_netstres switch (keystatus status){
  155. case KEY_SUCCESS:
  156.     key_netstarg knet;
  157. default:
  158.     void;
  159. };
  160.  
  161. #ifdef RPC_HDR
  162. %
  163. %#ifndef opaque
  164. %#define opaque char
  165. %#endif
  166. %
  167. #endif
  168. program KEY_PROG {
  169.     version KEY_VERS {
  170.  
  171.         /*
  172.          * This is my secret key.
  173.           * Store it for me.
  174.          */
  175.         keystatus
  176.         KEY_SET(keybuf) = 1;
  177.  
  178.         /*
  179.          * I want to talk to X.
  180.          * Encrypt a conversation key for me.
  181.           */
  182.         cryptkeyres
  183.         KEY_ENCRYPT(cryptkeyarg) = 2;
  184.  
  185.         /*
  186.          * X just sent me a message.
  187.          * Decrypt the conversation key for me.
  188.          */
  189.         cryptkeyres
  190.         KEY_DECRYPT(cryptkeyarg) = 3;
  191.  
  192.         /*
  193.          * Generate a secure conversation key for me
  194.          */
  195.         des_block
  196.         KEY_GEN(void) = 4;
  197.  
  198.         /*
  199.          * Get me the uid, gid and group-access-list associated
  200.          * with this netname (for kernel which cannot use NIS)
  201.          */
  202.         getcredres
  203.         KEY_GETCRED(netnamestr) = 5;
  204.     } = 1;
  205.     version KEY_VERS2 {
  206.  
  207.         /*
  208.          * #######
  209.          * Procedures 1-5 are identical to version 1
  210.          * #######
  211.          */
  212.  
  213.         /*
  214.          * This is my secret key.
  215.           * Store it for me.
  216.          */
  217.         keystatus
  218.         KEY_SET(keybuf) = 1;
  219.  
  220.         /*
  221.          * I want to talk to X.
  222.          * Encrypt a conversation key for me.
  223.           */
  224.         cryptkeyres
  225.         KEY_ENCRYPT(cryptkeyarg) = 2;
  226.  
  227.         /*
  228.          * X just sent me a message.
  229.          * Decrypt the conversation key for me.
  230.          */
  231.         cryptkeyres
  232.         KEY_DECRYPT(cryptkeyarg) = 3;
  233.  
  234.         /*
  235.          * Generate a secure conversation key for me
  236.          */
  237.         des_block
  238.         KEY_GEN(void) = 4;
  239.  
  240.         /*
  241.          * Get me the uid, gid and group-access-list associated
  242.          * with this netname (for kernel which cannot use NIS)
  243.          */
  244.         getcredres
  245.         KEY_GETCRED(netnamestr) = 5;
  246.  
  247.         /*
  248.          * I want to talk to X. and I know X's public key
  249.          * Encrypt a conversation key for me.
  250.           */
  251.         cryptkeyres
  252.         KEY_ENCRYPT_PK(cryptkeyarg2) = 6;
  253.  
  254.         /*
  255.          * X just sent me a message. and I know X's public key
  256.          * Decrypt the conversation key for me.
  257.          */
  258.         cryptkeyres
  259.         KEY_DECRYPT_PK(cryptkeyarg2) = 7;
  260.  
  261.         /*
  262.          * Store my public key, netname and private key.
  263.          */
  264.         keystatus
  265.         KEY_NET_PUT(key_netstarg) = 8;
  266.  
  267.         /*
  268.          * Retrieve my public key, netname and private key.
  269.          */
  270.          key_netstres
  271.         KEY_NET_GET(void) = 9;
  272.  
  273.         /*
  274.          * Return me the conversation key that is constructed
  275.          * from my secret key and this publickey.
  276.          */
  277.  
  278.         cryptkeyres
  279.         KEY_GET_CONV(keybuf) = 10;
  280.  
  281.  
  282.     } = 2;
  283. } = 100029;
  284.